package main

import (
	"context"
	"fmt"
	"go_rpc/grpc_test/proto"
	"google.golang.org/grpc"
	"google.golang.org/grpc/metadata"
	"net"
)

// 鸭子类型, 实现了GreaterServer的接口
type Server struct {
	proto.UnimplementedGreeterServer
}

func (s *Server) mustEmbedUnimplementedGreeterServer() {
	panic("implement me")
}

func (s *Server) SayHello(ctx context.Context, request *proto.HelloRequest) (*proto.HelloReply, error) {
	md, ok := metadata.FromIncomingContext(ctx)
	if !ok {
		fmt.Println("get metadata error")
	}
	for k, v := range md {
		fmt.Println(k, v)
	}
	return &proto.HelloReply{
		Message: "hello" + request.Name,
	}, nil
}

func main() {
	// server代理, 注册服务器
	// grpc.NewServer 是创建了一个grpc.Server，但没有注册服务并且不会接受请求呢！
	g := grpc.NewServer()
	//注册服务
	proto.RegisterGreeterServer(g, &Server{})
	// 启动socket监听
	lis, err := net.Listen("tcp", "0.0.0.0:8080")
	if err != nil {
		panic("failed to listen: " + err.Error())
	}
	// g 启动服务与监听
	_ = g.Serve(lis)
}
